/*
 * Copyright 2012 Rivoli team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.googlecode.rivoli.document.renderer.text

import com.googlecode.rivoli.RivoliException
import com.googlecode.rivoli.document.Text
import com.googlecode.rivoli.model.classhierarchy.RendererFor

@RendererFor(Text)
class TextRenderer extends AbstractTextRenderer<Text> {
	protected List<String> render(Text text, int width) {
		List<String> lines = []

		StringBuilder builder = new StringBuilder()

		text.value.tokenize().each {String word ->
			if (word.length() > width) {
				throw new RivoliException("'${word}' is longer than ${width} character(s)")
			}

			if (builder.length() == 0) {
				builder << word
			} else if (builder.length() + word.length() < width) {
				builder << ' ' << word
			} else {
				lines << builder.toString()

				builder = new StringBuilder(word)
			}
		}

		lines << builder.toString()
	}
}